<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 1.闭包函数
        // 用一个函数包裹其他函数即构建闭包结构
        // 借助于函数本身局部作用域的特性，通过返回函数来可以扩展函数的取值范围
        // 可以防止全局变量被污染



        //在一个函数内部又定义了一个函数,闭包的核心就是内部函数可以引用外部函数的参数和变量，通过返回函数来扩大函数的作用域
        function f1() {
            var n = 88;
            function f2() {//只是定义函数，必须调用才会执行
                console.log(n);//在内部函数f2中可以访问函数f1中局部变量n(子函数可以访问父函数中的变量)
            }
            // f2();
            return f2;//返回f2函数
        }

       

        // var result=f1();//f2
        // result();

        
    
        // f1()();


        // 让变量的值始终保持在内存中
      
        function f3(){
            var m=188;//局部变量
            add=function(){
                m+=1;
            };
            function f4(){
                console.log(m);
            }
            return f4;
        }

        var result2=f3();//f4
        result2();//188
        add();
        result2();//189
        add();
        result2();//190
        console.log("======================");

        var num1="全局环境的num1";
        function fun(){
            var num1=0;
            return function(){
                console.log(num1);
                num1++;
            };
        }
      
        var result3=fun();
        // console.log(result3);
        result3();//0
        result3();//1
        result3();//2


        


    </script>
</head>

<body>

</body>

</html>